package com.example.myapplication.database;

import androidx.room.Database;
import androidx.room.RoomDatabase;
import android.content.Context;
import androidx.room.Room;
import com.example.myapplication.dao.NoteDao;
import com.example.myapplication.entity.Note;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//“我这个数据库里有一张表（Note），
//版本号是1，
//操作表的接口是 NoteDao。”
@Database(entities = {Note.class},version = 1, exportSchema = false)
// 说明表名，版本
public abstract class InitDataBase extends RoomDatabase {
    //告诉room，有个接口NoteDao，以后通过它操作表、
// 连接 DAO
    //你只定义接口（抽象方法）；
    //Room 帮你写完真正的逻辑。
    public abstract NoteDao noteDao();
    // 创建一个线程池，数据库写操作都走这里
    public static final ExecutorService databaseWriteExecutor =
            Executors.newFixedThreadPool(4); // 4个线程，可以并行执行数据库任务

    // 单例实例，防止重复创建数据库
    private static volatile InitDataBase INSTANCE;

    // 获取数据库实例
    public static InitDataBase getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (InitDataBase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                                    InitDataBase.class, "note_database")
                            .fallbackToDestructiveMigration()
                            .build();
                }
            }
        }
        return INSTANCE;
    }

}
